package createtype.Builder;

/**
 * Created by LYJ on 2016/10/18.
 * 详细链接：Abstract Factory（抽象工厂）http://blog.csdn.net/u013256816/article/details/50975438
 */
public class MainTest {
    public static void main(String... args) {
        CarDirector director=new CarDirector();
        Car car=director.constructCar(new ConcreateBuilder());
        System.out.println(car.getEngine());
        System.out.println(car.getSkeleton());
        System.out.println(car.getWheel());
    }
}
/*
 *   适用场景
需要生产的产品对象有复杂的内部结构。
需要生产的产品对象的属性相互依赖，建造者模式可以强迫生成顺序。
在对象创建过程中会使用到系统中的一些其它对象，这些对象在产品对象的创建过程中不易得到。
    优点
使用建造者模式可以使客户端不必知道产品内部的组成细节。（封装性）
具体的建造者之间是相互独立的，对系统的扩展非常有利。（扩展性）
由于具体的建造者是独立的，因此可以对建造过程逐步细化，而不对其他模块产生任何影响。
   与抽象工厂的区别：
在建造者模式里，有个指导者，由指导者来管理建造者，用户是与指导者联系的，
指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的构造过程。
工厂模式是将对象的全部创建过程封装在工厂类中，由工厂类想客户端提供最终的产品。
而在建造者模式中，建造者类一般只提供产品类中各个组件的建造，而将具体建造过程交付给指导者，
由指导者负责将各个组件按照特定的规则组建为产品，然后将组建好的产品交付给客户端。
*/